/****************************************************************
 **  Nombre: DAORespuestaEDD.java                          *
 **  Version: 1.0.0                                             *
 **  Diagrama: GAPI v4.7.1                                      *
 **  Autor: Alberto Castro                        *
 **  Creado: 06-abril-2013
 *   Caso de uso: MPE1
 **  Modificado:                                                *
 ***************************************************************/
package DAO;

import AccesoBD.AccesoBaseDatos;
import Dominio.AsignaturaOfertaAcademicaPonderada;
import Dominio.PreguntaEDD;
import Dominio.RespuestaEDD;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
 * Clase que controla el acceso a la base de datos sobre dependencias didacticas.
 *
 */

public class DAORespuestasEDD {
    private final String TABLA_RESPUESTAS_EDD = "respuestas_edd";
    private final String COLUMNA_CLAVE_RESPUESTA_EDD = "clave_respuesta";
    private final String COLUMNA_CLAVE_PREGUNTA_EDD = "cve_pregunta_edd";
    private final String COLUMNA_NOMBRE_USUARIO = "usuario";
    private final String COLUMNA_CLAVE_PROFESOR = "cve_Profesor";
    private final String COLUMNA_CLAVE_ASIGNATURA = "cve_Asignatura";
    private final String COLUMNA_RESPUESTA = "respuesta";
    private AccesoBaseDatos acceso;
    private Connection conexion;
   /**
    * Constructor de la clase
    */ 
     public DAORespuestasEDD() {
        acceso = new AccesoBaseDatos();
        conexion = acceso.abrirConexion();
    }
/**
 * Cierra la conexion a la base de datos.
 */
     
    public void cerrarConexionARespuestasEHE() {
        acceso.cerrarConexion(conexion);
    }

    private boolean existeRespuestaDeAlumnoParaLaPregunta(String nombreUsuario, int claveProfesor, int claveAsignatura, int clavePregunta) {
                
        ResultSet resultadoBusqueda = null;

        try {
            Statement sentencia = acceso.crearSentenciaBD(conexion);
             String querySearch = "SELECT * FROM " + TABLA_RESPUESTAS_EDD + " WHERE "
                    + COLUMNA_NOMBRE_USUARIO +" = '" + nombreUsuario + "' AND "
                     + COLUMNA_CLAVE_ASIGNATURA+" = '"+claveAsignatura+"' AND "
                     + COLUMNA_CLAVE_PROFESOR+" = '"+claveProfesor+"' AND "
                     + COLUMNA_CLAVE_PREGUNTA_EDD+" = '"+clavePregunta+"';";
            resultadoBusqueda = sentencia.executeQuery(querySearch);
            
            int contadorRegistros = 0;
            while(resultadoBusqueda.next()) {
                contadorRegistros++;
            }
            
            if(contadorRegistros != 0) {
                return true;
            }
            
        }catch (SQLException ex) {
            System.out.println("Ocurrió un problema al tratar de buscar las preguntas");
        }
        return false;
    }
   /**
    * Registra las dependencias didacticas del alumno
    * @param listaRespuestas  Lista de dependencias didacticas del alumno
    */ 
    public void registrarRespuestasDeAlumno(ArrayList<RespuestaEDD> listaRespuestas) {
        
        for(int i = 0; i < listaRespuestas.size(); i++) {
            try {
                RespuestaEDD respuestaEDD = listaRespuestas.get(i);
                int clavePreguntaEDD = respuestaEDD.getPreguntaEDD().getClavePregunta();
                String nombreUsuario = respuestaEDD.getNombreUsuario();
                int claveAsignatura = respuestaEDD.getAsignatura().getClaveAsignatura();
                int claveProfesor = respuestaEDD.getProfesor().getClaveProfesor();
                int respuesta = respuestaEDD.getRespuesta();
                
                Statement sentencia = acceso.crearSentenciaBD(conexion);
                
                String query = "";
                
                if(existeRespuestaDeAlumnoParaLaPregunta(nombreUsuario, claveProfesor, claveAsignatura, clavePreguntaEDD)) {
                    query = "UPDATE " + TABLA_RESPUESTAS_EDD +" SET "
                        +COLUMNA_RESPUESTA+" = '"+respuesta+"' WHERE "                        
                        +COLUMNA_CLAVE_PREGUNTA_EDD+" = '"+clavePreguntaEDD+"' AND "
                        +COLUMNA_NOMBRE_USUARIO+" = '"+nombreUsuario+"' AND "
                        +COLUMNA_CLAVE_PROFESOR+" = '"+claveProfesor+"' AND "
                        +COLUMNA_CLAVE_ASIGNATURA+" = '"+claveAsignatura+"';";
                }
                else {
                    query = "INSERT INTO " + TABLA_RESPUESTAS_EDD +" ("
                        + COLUMNA_CLAVE_PREGUNTA_EDD + ", " +COLUMNA_NOMBRE_USUARIO+", "+COLUMNA_CLAVE_PROFESOR+", "+COLUMNA_CLAVE_ASIGNATURA+", "+COLUMNA_RESPUESTA+") VALUES ('"
                        + clavePreguntaEDD +"', '" + nombreUsuario + "', '"+claveProfesor+"', '"+claveAsignatura+"' , '"+respuesta+"');";
                }
                                
                sentencia.executeUpdate(query); 
                
            } catch (SQLException ex) {
                Logger.getLogger(DAORespuestasEHE.class.getName()).log(Level.SEVERE, null, ex);
                System.out.println("Ocurrió un problema al tratar de registrar las preguntas");
            }
        }                        
    }
    /**
     * obtiene las dependencias didacticas promedio para las asignaturas del profesor.
     * @param asignaturaOferta Asignatura de la oferta academica
     * @param preguntaEDD Pregunta de desempeño docente
     * @return El promedio de dependencias didacticas
     */
    public double obtenerRespuestasPromedioParaElParAsignaturaProfesor(AsignaturaOfertaAcademicaPonderada asignaturaOferta, PreguntaEDD preguntaEDD) {
        
        double promedio = -1;
        
        try {
            int claveAsignatura = asignaturaOferta.getAsignaturaOferta().getClaveAsignatura();
            int claveProfesor = asignaturaOferta.getAsignaturaOferta().getMaestro().getClaveProfesor();
            int clavePregunta = preguntaEDD.getClavePregunta();
            
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            String querySearch = "SELECT AVG("+COLUMNA_RESPUESTA+") FROM " + TABLA_RESPUESTAS_EDD + " WHERE "               
                    + COLUMNA_CLAVE_ASIGNATURA+" = '"+claveAsignatura+"' AND "
                    + COLUMNA_CLAVE_PROFESOR+" = '"+claveProfesor+"' AND "
                    + COLUMNA_CLAVE_PREGUNTA_EDD+" = '"+clavePregunta+"';";
           ResultSet resultadoBusqueda = sentencia.executeQuery(querySearch);
           
           while(resultadoBusqueda.next()) {
               promedio = resultadoBusqueda.getDouble(1);
           }
           
        } catch (SQLException ex) {
            Logger.getLogger(DAORespuestasEDD.class.getName()).log(Level.SEVERE, null, ex);
        }
       
        return promedio;
    }
    /**
     * Elimina las respuestas de dependencias didacticas que realizo el alumno.
     * @param nombreUsuario El nombre de usuario del alumno
     */
    public void eliminarRespuestasEDDDeAlumno(String nombreUsuario) {
        try {
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            String deleteQuery = "DELETE FROM " + TABLA_RESPUESTAS_EDD + " WHERE " + COLUMNA_NOMBRE_USUARIO + " = '" + nombreUsuario + "'";
            sentencia.executeUpdate(deleteQuery);
        } catch (SQLException ex) {
            Logger.getLogger(DAORespuestasEHE.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    /**
     * Verifica si un profesor existe con respuestas de dependencias didacticas
     * @param claveProfesor Clave del profesor
     * @return True si existe, false en caso contrario.
     */
    public boolean existeProfesorConRespuestasEDD(int claveProfesor) {
         ResultSet resultadoBusqueda = null;

        try {
            Statement sentencia = acceso.crearSentenciaBD(conexion);
             String querySearch = "SELECT * FROM " + TABLA_RESPUESTAS_EDD + " WHERE "                   
                     + COLUMNA_CLAVE_PROFESOR+" = '"+claveProfesor+"';";
            resultadoBusqueda = sentencia.executeQuery(querySearch);
            
            int contadorRegistros = 0;
            while(resultadoBusqueda.next()) {
                contadorRegistros++;
            }
            
            if(contadorRegistros != 0) {
                return true;
            }
            
        }catch (SQLException ex) {
            System.out.println("Ocurrió un problema al tratar de buscar las preguntas");
        }
        return false;
    }
}
